
// 模块A => 可以理解为:也是一个单独的store实例

// 1. 模块创建的思路 => 可以理解为,每个模块是一个单独的store实例
//    getters,actions中可以访问根模块的数据, 如果向访问其他模块,从根模块开始查找

// 2. 命名空间 
//     a. 默认情况下(默认false)，模块内部的 getter action 和 mutation 仍然是注册在全局命名空间的
//        模块中定义的 getters,mutations,actions中直接存储到根store中的   => 可以直接通过根store获取
//        state => 对应模块名称存储(子对象)

//     b. 如果命名空间设置为true，它的所有 getter、action 及 mutation 都会自动根据模块注册的路径调整命名
//        模块中定义的 getters,mutations,actions中直接存储到根store中的

//  小结
//      1. 无论命名空间为true还是false, state 都会对应模块名称存储(子对象)
//      2. 如果没有设置命名空间,  getter action 和 mutation 仍然是注册在全局命名空间的
//         如果设置了命名空间,getter、action 及 mutation 都会自动根据模块注册的路径调整命名(最终还是在根store => 对应模块名称注册 /mdA/addA)



export default {
    namespaced: false,  // 命名空间(默认false)
    state(){
        return {
            a:10,
        }
    },
    getters:{
        doubleA(state){
            return state.a * 2;
        },
        tripleA(state){
            return state.a * 3;
        },

        // getters中的函数可以访问当前模块的 state,getters,还可以访问根模块的getters
        // rootState  => 根store模块下的state
        // rootGetters  => 根store模块下的getters
        diamondA(state,getters,rootState,rootGetters){
            // return state.a * 4;
            console.log("访问doubleA",rootState.userInfo.adminname);
            console.log("访问doubleA",rootGetters.isLogin);
            return getters.doubleA * 2;
        }
    },
    mutations:{
        addA(state,payload){
            console.log("addA被调用",payload);
            state.a ++;
        }
    },
    actions:{
        // context和当前模块有相同属性和方法的新对象
        // commit,dispatch  => 可以调用当前模块和根模块下的方法
        // context => {state,getters,rootState,rootGetters,commit,dispatch}
        addA_Async(context,payload){
            console.log("addA_Async被调用",context);
            console.log("addA_Async被调用",payload);

            let {commit} = context;

            return new Promise(function(resolve){
                setTimeout(()=>{
                    commit("addA"),
                    resolve();
                })
            })
        }
    }


}